package handler;

import dao.CategoriaDao;
import dao.FilmeDao;
import dao.ProdutoraDao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Named;
import javax.persistence.RollbackException;
import pojo.Filme;

/**
 *
 * @author Vanessinha
 */
@Named(value = "filmeHandler")
@SessionScoped
public class FilmeHandler implements Serializable {

    @EJB
    private FilmeDao filmedao = new FilmeDao();
    @EJB
    private ProdutoraDao produtoradao = new ProdutoraDao();
    @EJB
    private CategoriaDao categoriadao = new CategoriaDao();
    private Filme filme = new Filme();
    private List<Filme> listafilme = new ArrayList<>();
    private Filme excluido;
    private long idProdutora;
    private long idCategoria;

    public FilmeHandler() {
        listafilme = filmedao.getAll();
    }

    public CategoriaDao getCategoriadao() {
        return categoriadao;
    }

    public void setCategoriadao(CategoriaDao categoriadao) {
        this.categoriadao = categoriadao;
    }

    public ProdutoraDao getProdutoradao() {
        return produtoradao;
    }

    public void setProdutoradao(ProdutoraDao produtoradao) {
        this.produtoradao = produtoradao;
    }

    public long getIdCategoria() {
        return idCategoria;
    }

    public void setIdCategoria(long idCategoria) {
        this.idCategoria = idCategoria;
    }

    public long getIdProdutora() {
        return idProdutora;
    }

    public void setIdProdutora(long idProdutora) {
        this.idProdutora = idProdutora;
    }

    public Filme getFilme() {
        return filme;
    }

    public void setFilme(Filme filme) {
        this.filme = filme;
    }

    public FilmeDao getFilmedao() {
        return filmedao;
    }

    public void setFilmedao(FilmeDao filmedao) {
        this.filmedao = filmedao;
    }

    public Filme getExcluido() {
        return excluido;
    }

    public void setExcluido(Filme excluido) {
        this.excluido = excluido;
    }

    public Filme getfilme() {
        return filme;
    }

    public void setfilme(Filme filme) {
        this.filme = filme;
    }

    public FilmeDao getfilmedao() {
        return filmedao;
    }

    public void setfilmedao(FilmeDao filmedao) {
        this.filmedao = filmedao;
    }

    public List<Filme> getListafilme() {
        return listafilme;
    }

    public void setListafilme(List<Filme> listafilme) {
        this.listafilme = listafilme;
    }

    public String salvar() {
        filme.setFilcodCategoria(categoriadao.pesquisar(idCategoria));
        filme.setFilcodProdutora(produtoradao.pesquisar(idProdutora));
        filmedao.inserir(filme);
        filme = new Filme();
        cancelar();
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "CONFIRMAÇÃO",
                "Cadastrado realizado com sucesso!"));
        return "CadastroFilme.xhtml";
    }

    public List<Filme> listafilme() {
        return listafilme = filmedao.getAll();
    }

    public String remover(Filme obj) {
        try {
            filmedao.excluir(obj);
            cancelar();
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "CONFIRMAÇÃO", "Registro removido com sucesso!"));
        } catch (RollbackException e) {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL,
                    "ATENÇÃO", "Registro já esta em uso, não pode ser removido."));
        }
        return "CadastroFilme.xhtml";
    }

    public void parametroRemover(ActionEvent event) {
        UIComponent link = event.getComponent();
        UIParameter param = (UIParameter) link.findComponent("idParaRemover");
        excluido = (Filme) param.getValue();
    }

    public void remover() {
        remover(excluido);
        excluido = null;
    }

    public void alterar(Filme obj) {
        idCategoria = obj.getFilcodCategoria().getCatCodigo();
        idProdutora = obj.getFilcodProdutora().getProCodigo();
        obj = filmedao.pesquisar(obj.getFilCodigo());
        this.filme = obj;
    }

    public String cancelar() {
        filme = new Filme();
        idCategoria = 0L;
        idProdutora = 0L;
        return "CadastroFilme.xhtml";
    }
    
       public String paginaCategoria() {
        return "CadastroCategoria.xhtml";
    }

    public String paginaProdutora() {
        return "CadastroProdutora.xhtml";
    }
 
}
